package net.lulihu.pangolin.headless.common.protocol.handler;

import net.lulihu.pangolin.headless.common.container.templet.Initialization;

/**
 * 注册消息类型处理程序组件
 * <p>
 * 在子类上使用{@linkplain net.lulihu.pangolin.headless.common.container.annotation.Component} 注解
 */
public interface RegistrationMessageTypeHandlerComponent extends MessageTypeHandler, Initialization {

    /**
     * 消息类型
     *
     * @return 消息处理类型
     */
    default byte messageType() {
        throw new NotImplementedException();
    }

    /**
     * 支持多个消息处理类型
     *
     * @return 消息处理类型
     */
    default byte[] messageTypes() {
        return new byte[]{messageType()};
    }


    @Override
    default void after() throws MessageTypeHandlerRegisteredException {
        byte[] types = messageTypes();
        for (byte type : types) {
            MessageTypeHandlerRegistration.register(type, this);
        }
    }


    class NotImplementedException extends RuntimeException {

        public NotImplementedException() {
            super();
        }
    }
}
